﻿using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace Black.CameraCapture.Client
{
    /// <summary>
    /// Converter qui inverse la valeur d'un booléen
    /// </summary>
    public sealed class BoolInvertionConverter : IValueConverter
    {
        /// <summary>
        /// Convertie un booléen en son inverse
        /// </summary>
        /// <param name="value">Nom de l'assembly à instancier</param>
        /// <param name="targetType">Type de la target</param>
        /// <param name="parameter">Paramètre de la conversion</param>
        /// <param name="language">Culture de la conversion</param>
        /// <returns>Instance, sinon valeur d'origine</returns>
        public object Convert(object value, Type targetType, object parameter, CultureInfo language)
        {
            // Est-ce un booléen ?

            if (value is bool)
            {
                bool result = (bool)value;
                return (!result);
            }

            // Pas de convertion

            return (value);
        }

        /// <summary>
        /// Convertie un booléen en son inverse
        /// </summary>
        /// <param name="value">Nom de l'assembly à instancier</param>
        /// <param name="targetType">Type de la target</param>
        /// <param name="parameter">Paramètre de la conversion</param>
        /// <param name="language">Culture de la conversion</param>
        /// <returns>Chaine de caractère, sinon valeur d'origine</returns>
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo language)
        {
            // Est-ce une visibilité

            if (value is Visibility)
            {
                bool result = (bool)value;
                return (!result);
            }

            // Pas de convertion

            return (value);
        }
    }
}
